package dao

import (
	admin "admin_srv/basic/proto"
	"admin_srv/handler/model"
	"fmt"
	"time"
)

// 创建会员套餐
func CreateVipPlan(in *admin.CreateVipPlanReq) (*model.VipPlans, error) {
	vipPlan := &model.VipPlans{
		PlanName:    in.PlanName,
		PlanDays:    uint(in.PlanDays),
		Price:       in.Price,
		Description: in.Description,
		IsAvailable: 1,
		IsDeleted:   0,
	}
	if err := vipPlan.CreateVipPlan(); err != nil {
		return nil, fmt.Errorf("创建会员套餐失败")
	}
	return vipPlan, nil
}

// 获取会员套餐列表
func GetVipPlanList(in *admin.GetVipPlanListReq) ([]*admin.VipPlanInfo, error) {
	var vipPlan model.VipPlans
	list, err := vipPlan.GetVipPlanList()
	if err != nil {
		return nil, fmt.Errorf("获取会员套餐列表失败")
	}
	var vipPlanList []*admin.VipPlanInfo
	for _, plans := range list {
		vipPlanList = append(vipPlanList, &admin.VipPlanInfo{
			Id:          int64(plans.Id),
			PlanName:    plans.PlanName,
			PlanDays:    int64(plans.PlanDays),
			Price:       plans.Price,
			Description: plans.Description,
			IsAvailable: int64(plans.IsAvailable),
			IsDeleted:   int64(plans.IsDeleted),
			CreateTime:  plans.CreateTime.Format(time.DateTime),
		})
	}

	return vipPlanList, nil
}

// 获取会员套餐详情
func GetVipPlanDetail(in *admin.GetVipPlanDetailReq) (*model.VipPlans, error) {
	var vipPlan model.VipPlans
	if err := vipPlan.GetVipPlanDetail(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("获取会员套餐")
	}
	if vipPlan.Id == 0 {
		return nil, fmt.Errorf("该会员套餐不存在")
	}
	return &vipPlan, nil
}

// 更新会员套餐
func UpdateVipPlan(in *admin.UpdateVipPlanReq) (*model.VipPlans, error) {
	var vipPlan model.VipPlans
	if err := vipPlan.GetVipPlanDetail(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("获取会员套餐失败")
	}
	if vipPlan.Id == 0 {
		return nil, fmt.Errorf("该会员套餐不存在，无法更新")
	}
	vips := &model.VipPlans{
		PlanName:    in.PlanName,
		PlanDays:    uint(in.PlanDays),
		Price:       in.Price,
		Description: in.Description,
	}
	vips.Id = uint(in.Id)
	if err := vips.UpdateVipPlan(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("更新会员套餐失败")
	}
	return vips, nil
}

// 删除会员套餐
func DeleteVipPlan(in *admin.DeleteVipPlanReq) (*model.VipPlans, error) {
	var vipPlan model.VipPlans
	if err := vipPlan.GetVipPlanDetail(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("获取会员套餐失败")
	}
	if vipPlan.Id == 0 {
		return nil, fmt.Errorf("该会员套餐不存在，无法删除")
	}
	if err := vipPlan.DeleteVipPlan(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("删除会员套餐失败")
	}
	return &vipPlan, nil
}

// 启用会员套餐
func EnableVipPlan(in *admin.EnaBleVipPlanReq) (*model.VipPlans, error) {
	var vipPlan model.VipPlans
	if err := vipPlan.GetVipPlanDetail(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("获取会员套餐失败")
	}
	if vipPlan.Id == 0 {
		return nil, fmt.Errorf("该会员套餐不存在，无法启动")
	}
	if err := vipPlan.EnaBleVipPlan(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("启动会员套餐失败")
	}
	return &vipPlan, nil
}

// 禁用会员套餐
func DisableVipPlan(in *admin.DisableVipPlanReq) (*model.VipPlans, error) {
	var vipPlan model.VipPlans
	if err := vipPlan.GetVipPlanDetail(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("获取会员套餐失败")
	}
	if vipPlan.Id == 0 {
		return nil, fmt.Errorf("该会员不存在，无法禁用")
	}
	if err := vipPlan.DisableVipPlan(&model.VipPlans{Id: uint(in.Id)}); err != nil {
		return nil, fmt.Errorf("禁用会员套餐失败")
	}
	return &vipPlan, nil
}
